//vuex封装的添加购物车模块
export default {
  // 自动添加上该模块的命名空间前缀
  namespaced: true,
  //相当于data 存储数据
  state: {
    cartData: JSON.parse(localStorage.getItem('cartData')) || []
  },
  // 定义方法，操作state方法
  mutations: {
    // 添加商品到购物车
    addToCart(state, data) {
      // 遍历传递过来的新数据
      data.forEach(newItem => {
        // 检查新数据中的 ID 是否存在于购物车数据中
        let existingItem = state.cartData.find(item => item.id === newItem.id && item.Englishname === newItem.Englishname);
        // 如果存在相同 ID 和 Englishname 的数据，则增加该商品的数量
        if (existingItem) {
          existingItem.num += 1;
        } else {
          // 如果不存在相同 ID 和 Englishname 的数据，则将新数据添加到购物车数据中
          state.cartData.push({ ...newItem, num: 1 });
        }
      });
      // 更新本地存储中的购物车数据
      try {
        localStorage.setItem('cartData', JSON.stringify(state.cartData));
      } catch (error) {
        console.error(error);
      }
    },
    //删除商品
    delCartItem(state, id) {
      // 满足条件1 反正 -1
      const index = state.cartData.findIndex(item => item.id === id);
      // 不等于 -1 找到了需要删除的商品
      if (index !== -1) {
        state.cartData.splice(index, 1);
        // 更新本地存储中的购物车数据
        localStorage.setItem('cartData', JSON.stringify(state.cartData));
      }
    },
    // 商品数量增加
    increaNum(state, id) {
      const item = state.cartData.find(item => item.id === id);
      if (item && item.num < 10) {
        item.num += 1;
        localStorage.setItem('cartData', JSON.stringify(state.cartData));
      } else {
        // console.log('商品数量不能超过10');
        alert('商品数量不能超过10');
      }
    },
    // 商品数量减少
    decreaseNum(state, id) {
      const item = state.cartData.find(item => item.id === id);
      if (item) {
        if (item.num > 1) {
          item.num -= 1;
        } else {
          // 商品数量为1时，弹出确认框
          //监听选择框的点击事件
          const confirmDelete = window.confirm('商品数量为1，确认要删除该商品吗？');
          if (confirmDelete) {
            const index = state.cartData.findIndex(item => item.id === id);
            // 不等于-1就是找到了商品
            if (index !== -1) {
              state.cartData.splice(index, 1);
              localStorage.setItem('cartData', JSON.stringify(state.cartData)); // 更新本地存储
            }
          }
        }
      }
    },
    //全选商品
    updateAllProdutChecked(state, checked) {
      state.cartData.forEach(item => {
        item.isChecked = checked;
      });
      localStorage.setItem('cartData', JSON.stringify(state.cartData)); // 保存到本地存储
    },
    //单个商品选择
    updateProdutChecked(state, { checked, prodId }) {
      //用传过来的数据对比 id 匹配的 反选
      const product = state.cartData.find(item => item.id === prodId);
      if (product) {
        product.isChecked = checked;
      }
      localStorage.setItem('cartData', JSON.stringify(state.cartData)); // 保存到本地存储
    }
  },
  // 计算属性
  getters: {
    // 计算购物车中选中商品的总价
    totalInfo(state) {
      // 初始化总价和总数量为0
      let totalInfo = {
        totalPrice: 0,
        totalNum: 0
      };
      // 遍历购物车中的商品
      state.cartData.forEach(item => {
        // 如果商品被选中，将其价格乘以数量累加到总价中
        if (item.isChecked) {
          totalInfo.totalPrice += item.price * item.num;
          totalInfo.totalNum += item.num;
        }
      });
      // 返回总价和总数量对象
      return totalInfo;
    },
  }
}
